package cn.yuemouren.linkedlist.leetcode;

import java.util.List;

/**
 * @Author: Timi
 * @Description:
 * @Date: 2020/5/15 8:53
 */
public class Solution {
    //删除链表中等于给定值 val 的所有节点。 不使用虚拟头结点
    public ListNode removeElements(ListNode head, int val) {
        while(null != head && head.val == val){
//            ListNode delNode = head;
//            head = head.next;
//            delNode.next = null;
            head = head.next;
        }
        if(null == head)
            return null;
        ListNode prev = head;
        while (null != prev.next){
            if(prev.next.val == val){
//                ListNode delNode = prev;
//                prev = delNode.next;
//                delNode.next = null;
                prev.next = prev.next.next;
            } else{
                prev = prev.next;
            }
        }
        return head;
    }

    //将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(null == l1){
            return l2;
        }
        if(null == l2){
            return l1;
        }
        if(l1.val < l2.val){
            l1.next = mergeTwoLists(l1.next,l2);
            return l1;
        } else{
            l2.next = mergeTwoLists(l1,l2.next);
            return l2;
        }
    }
}
